<!--
Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
Code distributed by Google as part of the polymer project is also
subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
-->

<!--
`paper-radio-button` is a button that can be either checked or unchecked.
User can tap the radio button to check it.  But it cannot be unchecked by
tapping once checked.

Use `paper-radio-group` to group a set of radio buttons.  When radio buttons
are inside a radio group, only one radio button in the group can be checked.

Example:

    <paper-radio-button></paper-radio-button>
    
Styling radio button:

To change the ink color for checked state:

    paper-radio-button::shadow #ink[checked] {
      color: #4285f4;
    }
    
To change the radio checked color:
    
    paper-radio-button::shadow #onRadio {
      background-color: #4285f4;
    }
    
To change the ink color for unchecked state:

    paper-radio-button::shadow #ink {
      color: #b5b5b5;
    }
    
To change the radio unchecked color:
    
    paper-radio-button::shadow #offRadio {
      border-color: #b5b5b5;
    }

@group Paper Elements
@element paper-radio-button
@homepage github.io
-->

<link rel="import" href="../paper-ripple/paper-ripple.html">

<polymer-element name="paper-radio-button" role="radio" tabindex="0" aria-checked="false">
<template>

  <link rel="stylesheet" href="paper-radio-button.css">
  
  <div id="radioContainer" class="{{ {labeled: label} | tokenList }}">
  
    <div id="offRadio"></div>
    <div id="onRadio"></div>
    
    <paper-ripple id="ink" class="circle recenteringTouch" checked?="{{!checked}}"></paper-ripple>
    
  </div>
  
  <div id="radioLabel" aria-hidden="true" hidden?="{{!label}}">{{label}}<content></content></div>
  
</template>
<script>

  Polymer('paper-radio-button', {
    
    /**
     * Fired when the checked state changes.
     *
     * @event change
     */
    
    publish: {
      /**
       * Gets or sets the state, `true` is checked and `false` is unchecked.
       *
       * @attribute checked
       * @type boolean
       * @default false
       */
      checked: {value: false, reflect: true},
      
      /**
       * The label for the radio button.
       *
       * @attribute label
       * @type string
       * @default ''
       */
      label: '',
      
      /**
       * Normally the user cannot uncheck the radio button by tapping once
       * checked.  Setting this property to `true` makes the radio button
       * toggleable from checked to unchecked.
       *
       * @attribute toggles
       * @type boolean
       * @default false
       */
      toggles: false,
      
      /**
       * If true, the user cannot interact with this element.
       *
       * @attribute disabled
       * @type boolean
       * @default false
       */
      disabled: {value: false, reflect: true}
    },
    
    eventDelegates: {
      tap: 'tap'
    },
    
    tap: function() {
      this.toggle();
      this.fire('paper-radio-button-activate');
    },
    
    toggle: function() {
      this.checked = !this.toggles || !this.checked;
    },
    
    checkedChanged: function() {
      this.$.onRadio.classList.toggle('fill', this.checked);
      this.setAttribute('aria-checked', this.checked ? 'true': 'false');
      this.fire('change');
    },
    
    labelChanged: function() {
      this.setAttribute('aria-label', this.label);
    }
    
  });
  
</script>
</polymer-element>
